chore(ios): raise Rokt iOS floor to 5.3 via mParticle-Rokt 9.3.1 - #369
Conversation
Pin the Expo plugin and sample to mParticle-Rokt ~> 9.3 (kit declares Rokt-Widget ~> 5.3) plus an explicit Rokt-Widget ~> 5.3 companion so consumers cannot resolve Rokt iOS 5.2.x.
PR SummaryMedium Risk Overview The sample drops explicit The Expo iOS plugin now injects only missing Reviewed by Cursor Bugbot for commit 02c0283. Bugbot is set up for automated code reviews on this repo. Configure here. |
There was a problem hiding this comment.
🟡 Not ready to approve
The Expo Podfile injection currently skips adding the new companion Rokt-Widget pin when the kit pod is already present, which can prevent the intended floor from being enforced.
Once you've addressed the issues Copilot identified, you can request another Copilot review.
This review doesn't count toward merge requirements. Sign up for the private preview to control whether Copilot approvals count.
Pull request overview
This PR raises the iOS Rokt dependency floor across the wrapper’s documentation, sample app, and Expo config plugin by moving to mParticle-Rokt ~> 9.3 and explicitly pinning Rokt-Widget ~> 5.3 to ensure apps don’t resolve older 5.2.x widget builds.
Changes:
- Updated sample iOS Podfile and multiple docs (README/MIGRATING/ExpoTestApp) to use
mParticle-Rokt ~> 9.3plus an explicitRokt-Widget ~> 5.3pin. - Updated the Expo config plugin to pin
mParticle-Roktto~> 9.3and add a companionRokt-Widget ~> 5.3pod. - Updated CHANGELOG to reflect the new iOS Rokt floor behavior and rationale.
File summaries
| File | Description |
|---|---|
| sample/README.md | Updates sample dependency guidance to the new mParticle-Rokt/Rokt-Widget floor. |
| sample/ios/Podfile | Raises the sample’s Rokt pod versions and keeps the schema pin. |
| README.md | Updates integration snippet and clarifies Expo plugin pinning behavior. |
| plugin/src/withMParticleIOS.ts | Adds companion pod injection for Rokt-Widget alongside the kit and updates version requirements. |
| MIGRATING.md | Updates migration guidance for the new iOS Rokt floor and Expo pinning. |
| ExpoTestApp/README.md | Updates generated Podfile expectations for iOS kits. |
| CHANGELOG.md | Documents the iOS Rokt floor change and related pinning behavior. |
Review details
Comments suppressed due to low confidence (1)
plugin/src/withMParticleIOS.ts:507
- The Expo Podfile injection skips adding companion pods when the primary kit pod already exists:
kitsAlreadyAddedonly checks forpod 'mParticle-Rokt', so a Podfile that already contains the kit but notRokt-Widgetwill not get the newRokt-Widget ~> 5.3floor (and the code comment implies this floor should be enforced). Consider adding only the missing kit/companion pod lines rather than treating the whole kit list as already added.
if (props.iosKits && props.iosKits.length > 0) {
const kitPods = getKitPodDeclarations(props.iosKits).join('\n');
// Check if kits are already added
const kitsAlreadyAdded = props.iosKits.every(kit =>
podfileContent.includes(`pod '${kit}'`)
);
- Files reviewed: 7/7 changed files
- Comments generated: 1
- Review effort level: Low
We're testing this review assessment. Please use 👍 or 👎 to tell us if it's correct.
Address review feedback and unblock iOS CI: - Podfile kit injection now matches individual pods instead of the whole kit selection, so a Podfile that already declares mParticle-Rokt still picks up the Rokt-Widget companion floor on upgrade. - Extract addKitPodsToPodfile and cover the upgrade path with unit tests. - Remove the sample DcuiSchema 2.7.0 pin. Rokt-Widget 5.3 resolves RoktUXHelper 1.0.0, which requires DcuiSchema exactly, so the pin conflicts during resolution and the float it guarded is no longer possible. - Clarify in MIGRATING that kit 9.3.2+ enforces the 5.3 floor transitively and the explicit pin only makes it visible / defeats a stale lockfile.
mParticle-Rokt 9.3 already requires Rokt-Widget ~> 5.3, so declaring Rokt-Widget directly was redundant and contradicted existing guidance that apps receive it transitively through the kit. - Drop the companion Rokt-Widget pin from the Expo config plugin, the sample Podfile, and the README / MIGRATING / ExpoTestApp examples. - Remove the plugin companion-pod mechanism and its tests, restoring the original jest and plugin tsconfig configuration. - Keep the per-kit injection filter so a Podfile that already declares one kit is not re-injected alongside a missing one. - Keep Rokt-Widget, RoktUXHelper, and DcuiSchema in the dynamic-framework pre_install lists, which is unrelated to declaring pods.
There was a problem hiding this comment.
Cursor Bugbot has reviewed your changes using default effort and found 1 potential issue.
❌ Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, have a team admin enable autofix in the Cursor dashboard.
Reviewed by Cursor Bugbot for commit 6b7effd. Configure here.
`~> 9.3` admitted kit 9.3.0, which still declares Rokt-Widget ~> 5.2, so the stated 5.3 floor was not enforced. Reproduced with `pod install`: `~> 9.3` plus Rokt-Widget 5.2.6 resolves mParticle-Rokt 9.3.0 and Rokt-Widget 5.2.6. 9.3.1 is the first kit release declaring Rokt-Widget ~> 5.3, so use `>= 9.3.1', '< 10.0'` in the Expo config plugin, the sample Podfile, and docs, matching the podspec idiom already used for the core SDK floor.

Summary
Raises the iOS Rokt SDK floor for this wrapper by requiring
mParticle-Rokt >= 9.3.1, < 10.0.Kit
9.3.1is the first release declaringRokt-Widget ~> 5.3(the bump in mParticle/mparticle-apple-sdk#796 landed before that release), so Rokt iOS resolves transitively through the kit. Apps do not declareRokt-Widgetthemselves, which matches the guidance this repo already carried.9.3.0is deliberately excluded — it still declaresRokt-Widget ~> 5.2, so a~> 9.3range would not enforce the floor:Rokt-Widget ~> 5.2Rokt-Widget ~> 5.3Rokt-Widget ~> 5.3Dependency changes
iosKits)mParticle-Rokt ~> 9.2mParticle-Rokt >= 9.3.1, < 10.0sample/ios/PodfilemParticle-Rokt ~> 9.2,Rokt-Widget 5.2.0,DcuiSchema 2.7.0mParticle-Rokt >= 9.3.1, < 10.0The
>= X, < 10.0form matches the idiom the podspec already uses for the core SDK (mParticle-Apple-SDK-ObjC >= 9.2.2, < 10.0).Resolved graph from the kit alone (verified locally with
pod install):Rokt-WidgetandDcuiSchemapins removed from the sample. TheDcuiSchema 2.7.0pin guarded against the schema floating within~> 2.6and desyncing fromRoktUXHelperSwift sources.Rokt-Widget 5.3resolvesRoktUXHelper 1.0.0, which requiresDcuiSchemaat an exact version, so that float is no longer possible — and the old pin now makes resolution fail outright:Rokt-Widget,RoktUXHelper, andDcuiSchemaremain in the dynamic-frameworkpre_installlists; that is about linkage, not about declaring pods.Expo plugin injection fix. Kit injection previously skipped the whole block when every requested kit was already in the Podfile, so a config requesting two kits with only one present would re-inject both and duplicate the existing declaration. Kits are now matched individually and only missing ones are added.
No React Native bridge or JavaScript API changes.
Upstream chain (no further upstream PRs required for the 5.3 floor):
5.3.0published to CocoaPods;5.3.1release open at ROKT/rokt-sdk-ios#269 and will float under the kit's~> 5.3mParticle-RoktfloorsRokt-Widgetat~> 5.3as of kit9.3.1Testing Plan
Verified locally with
pod install:pod 'mParticle-Rokt', '>= 9.3.1', '< 10.0'resolvesmParticle-Rokt 9.3.2,Rokt-Widget 5.3.0,RoktUXHelper 1.0.0,DcuiSchema 2.8.1, core9.3.2mParticle-Rokt 9.3.0against the new floor fails with a CocoaPods version conflict, confirming9.3.0is excluded~> 9.3plusRokt-Widget 5.2.6resolved kit9.3.0withRokt-Widget 5.2.6, i.e. the old range did not enforce the flooryarn jestpasses;tsc --build pluginclean;trunk checkreports no new issues on all changed filesReviewer verification:
iOS Sample AppCI green (was failing on theDcuiSchemaconflict)iosKits: ["mParticle-Rokt"], prebuild generatespod 'mParticle-Rokt', '>= 9.3.1', '< 10.0'and noRokt-WidgetlineConsumer impact: existing apps must run
pod update(or regenerate the Expo Podfile) to pick up the new floor, and must remove anyDcuiSchemapin. Documented inMIGRATING.md.Master Issue
Closes https://go.mparticle.com/work/REPLACEME